import { SignJWT } from 'jose'

// 生成 JWT
export async function generateJWT(userId, roleId) {
  try {
    // Payload (JWT 内容)
    const payload = {
      id: parseInt(userId),
      roleId: parseInt(roleId)
    }

    // 密钥（从环境变量获取更安全）
    const secret = new TextEncoder().encode( 'online_exam_system')

    // 生成 Token
    const jwt = await new SignJWT(payload)
      .setProtectedHeader({ alg: 'HS256' }) // 算法
      .setIssuedAt() // 签发时间
      .setExpirationTime('24h') // 过期时间
      .sign(secret)

    return jwt
  } catch (error) {
    console.error('生成 JWT 失败:', error)
    throw error
  }
}

// 验证并解码 JWT
export async function verifyJWT(token) {
  try {
    // 密钥（需与签名密钥一致）
    const secret = new TextEncoder().encode(process.env.JWT_SECRET || 'your-256-bit-secret')

    // 验证并解码
    const { payload } = await jwtVerify(token, secret, {
      algorithms: ['HS256'], // 必须指定允许的算法
      clockTolerance: 15, // 允许15秒时钟偏差
      issuer: 'your-service' // 签发者验证（可选）
    })

    return {
      isValid: true,
      payload,
      error: null
    }
  } catch (error) {
    return {
      isValid: false,
      payload: null,
      error: error.code || 'INVALID_TOKEN'
    }
  }
}

